package com.tyros.common.secure.utils;

import com.tyros.common.secure.codec.Codec;

import java.security.SecureRandom;

/**
 * 安全随机工具类
 *
 * @author zsy
 */
public class RandomKit {

    static class Instance {
        private final static SecureRandom RANDOM = new SecureRandom();
    }

    /**
     * 随机生成指定长度的字节数组
     *
     * @param length 长度
     * @return 符合长度的字节数组
     */
    public static byte[] random(int length) {
        byte[] bytes = new byte[length];
        synchronized (Instance.RANDOM) {
            Instance.RANDOM.nextBytes(bytes);
        }
        return bytes;
    }

    /**
     * 生成指定长度的字节对象并编码
     *
     * @param length 长度
     * @param codec  编码,可选值有base64/base16/string
     * @return 编码后字符串
     */
    public static String random(int length, Codec codec) {
        return codec.encode(random(length));
    }
}
